/**
 * 系统参数 模型.
 */

//let serverSideSettings = null;    // 服务端参数缓存

module.exports = class SettingsModel extends think.Model {
    get tableName() {
        return 'settings';
    }

    /**
     * 获取全部参数。
     */
    async getAll(){
        const params = await this.field('name, value, type').where({available: 1}).select();
        return SettingsModel.parseSettings(params);
    }

    /**
     * 获取客户端参数。
     */
    async getClientSideSettings() {
        const params = await this.field('name, value, type').where({side: [0, 2], available: 1}).select();
        return SettingsModel.parseSettings(params);
    }

    /**
     * 获取服务端参数。
     */
    async getServerSideSettings() {
        const params = await this.field('name, value, type').where({side: [1, 2], available: 1}).select();
        return SettingsModel.parseSettings(params);
    }

    /**
     * 解析参数格式。
     */
    static parseSettings(params) {
        const settings = {};

        params.forEach(param => {
            let v = null;
            switch(param.type) {
                case 'int':
                    v = parseInt(param.value);
                    break;

                case 'float':
                    v = parseFloat(param.value);
                    break;

                case 'boolean':
                    v = parseInt(param.value) !== 0;
                    break;

                case 'object':
                    v = JSON.parse(param.value);
                    break;

                default:
                    v = param.value;
                    break;
            }

            settings[param.name] = v;
        });

        return settings;
    }
};
